МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра СКС
/
ЛАБОРАТОРНА РОБОТА №1
з дисципліни:
“ Дослідження і проектування надвеликих інтегральних схем”
Львів – 2016
Тема роботи: Розробка структури спеціалізованого перемножувача на константу без оптимізації.
Мета роботи: Згідно заданого варіанту розробити структурну схему перемножувача на константу без оптимізації, та за допомогою мови VHDL описати розроблену структуру пристрою та провести функціональну симуляція проекту.
1. ТЕОРЕТИЧНІ ВІДОМОСТІ
1.1. Алгоритм множення числа на константу.
Перед тим, як почати описувати базову структуру спеціалізованого перемножувача на константу, слід, перш за все, розглянути математичні основи множення двійкових чисел.
Нехай нам потрібно отримати добуток (Z) двох восьмирозрядних двійкових чисел X та H:
X:
X7
X6
X5
X4
X3
X2
X1
X0
H:
H7
H6
H5
H4
H3
H2
H1
H0
Їхнім добутком буде сума чисел, які утворює один із співмножників, зсунутий вправо на таку кількість розрядів, яка дорівнює порядковому номеру відповідного біту іншого співмножника (порядкові номери бітів рахуються з права на ліво, порядковий номер крайнього правого біту дорівнює нулю).
0
0
0
0
0
0
0
X7
X6
X5
X4
X3
X2
X1
X0
*H0
0
0
0
0
0
0
X7
X6
X5
X4
X3
X2
X1
X0
0
*H1
0
0
0
0
0
X7
X6
X5
X4
X3
X2
X1
X0
0
0
*H2
0
0
0
0
X7
X6
X5
X4
X3
X2
X1
X0
0
0
0
*H3
0
0
0
X7
X6
X5
X4
X3
X2
X1
X0
0
0
0
0
*H4
0
0
X7
X6
X5
X4
X3
X2
X1
X0
0
0
0
0
0
*H5
0
X7
X6
X5
X4
X3
X2
X1
X0
0
0
0
0
0
0
*H6
X7
X6
X5
X4
X3
X2
X1
X0
0
0
0
0
0
0
0
*H7
Z:
Z15
Z14
Z13
Z12
Z10
Z9
Z8
Z7
Z6
Z5
Z4
Z3
Z2
Z1
Z0
Рис. 1. Схема множення двох восьмирозрядних чисел.
Число зсунуте на к розрядів вправо доповнюється к нулями справа і м –1 нулями зліва, де м – ширина розрядної сітки співмножників (в нашому випадку дорівнює 8). Як бачимо, розрядність результату є в два рази більша за розрядність вхідних даних, плюс один біт на можливість переповнення.
Згідно наведеного прикладу результат множення двох чисел Z=X*H можна записати:
Z = (H0*X.L0) + (H1*X.L1) + (H2*X.L2) +…+ (H7*X.L7) ( 2.1 )
де Нк – к-ий розряд числа Н, X.Lk – число Х зсунуте вліво на к розрядів.
Оскільки мова йде про множення числа Х на константу Н, то розряди числа Н наперед відомі і формула ( 2.1 ) спрощується.
Приклад:
H(2)= 10011000
Z = (0*X.L0) + (0*X.L1) + (0*X.L2) + (1*X.L3) + (1*X.L4) + (0*X.L5) + (0*X.L6) + (1*X.L7) = X.L3 + X.L4 + X.L7
1.1.2. Формат вхідних чисел.
Вхідні числа є 32-розрядними числами в діапазоні 0≤X<1, та мають наступний формат:
31
0
0
X31, X30
. . .
X1, X0
32
Для прикладу розглянемо константу: cos()
Десяткове представлення константи:
Н(10)= 1135025548
Двійкове представлення константи в заданому форматі:
Н(2)= 0,01000011101001110001110110001100
Шістнадцяткове представлення константи в заданому форматі:
Н(16)= 43A71D8C
1.1.3. Базова структура перемножувача.
Таким чином,
Z = x.L2 + x.L3+ x.L7 + x.L8 + x.L10 + x.L11 + x.L12 + x.L16 + x.L17 + x.L18 + x.L21 + x.L23 + x.L24 + x.L25+ x.L30.
Групуючи доданки попарно, отримаємо таку структуру:
Рис. 2. Базова структура перемножувача.
Апаратна складність пристрою визначається кількістю ’1’ в константі.
Кількість одиниць – 15.
Кількість суматорів – 14.
Нижче подано vhdl-код не оптимізованої структури перемножувача на константу:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity my_mult is
port(
DIN : in STD_LOGIC_VECTOR(31 downto 0);
DOUT : out STD_LOGIC_VECTOR(31 downto 0)
);
end my_mult;
architecture my_mult of my_mult is
signal X_L2,X_L3,X_L7,X_L8,X_L10,X_L11,X_L12,X_L16,X_L17,X_L18,X_L21,X_L23,X_L24,X_L25,X_L30: STD_LOGIC_VECTOR(63 downto 0);
signal X_L2_X_L3,X_L7_X_L8,X_L10_X_L11,X_L12_X_L16,X_L17...